<div>
  Логически израз, който определя кои агенти могат да изграждат този проект.
  Изразът ще се изчисли с всеки етикет и име на всеки наличен агент и резултатът
  ще е или <i>истина</i>, или <i>лъжа</i>. Само когато изразът се изчисли като
  <i>истина</i>, агентът ще може да изгражда този проект.
  <p>
  Ако проектът трябва задължително да се изгражда на определен подчинен компютър
  или на основния, въведете съответно името на компютъра или
  <code>master</code>.
  <p>
  Като цяло трябва да избягвате употребата на <i>името</i> на подчинения
  компютър като вместо това използвате <i>етикетите</i> на компютрите. Както е
  документирано на страницата за настройки на всеки агент и страницата за
  <i>Системни настройки</i> на основния компютър, етикетите могат да се
  използват за определяне на кои операционни системи върви Jenkins, каква е 
  архитектурата на процесора както и на всякакви други характеристики.
  <br>
  Като използвате етикети елиминирате нуждата да преправяте етикетните изрази
  всеки път като добавяте, махате или преименувате машини.
  <p>
  Етикетният израз може да е съвсем прост, напр. единичен <b>етикет</b> или
  <b>име на машина</b> като <code>android-builder</code> или
  <code>linux-machine-42</code>.<br>
  Може да ползвате и някои<i>оператори</i>, за да създавате по-сложни изрази.

  <h3>Поддържани оператори</h3>
  Поддържат се следните оператори в намаляващ приоритет:
  <dl>
    <dt><tt>(израз)</tt></dt>
    <dd>
      скоби — за изрично указване на приоритета на операция
    </dd>

    <dt><tt>!израз</tt></dt>
    <dd>
      НЕ — отрицание, стойността на <tt>израза</tt> трябва да <b>не</b> е
      истина.
    </dd>

    <dt><tt>a &amp;&amp; b</tt></dt>
    <dd>
      И — <b>и двата</b> израза <tt>a</tt> и <tt>b</tt> трябва да са
      истина.
    </dd>

    <dt><tt>a || b</tt></dt>
    <dd>
      ИЛИ — <b>някой от</b> изразите <tt>a</tt> или <tt>b</tt> трябва да е
      истина.
    </dd>

    <dt><tt>a -> b</tt></dt>
    <dd>
      ИМПЛИКАЦИЯ — АКО - ТО, същото като <tt>!a || b</tt>.<br>
      Напр. <tt>windows -> x64</tt> означава: „ако се ползва компютър под
      Windows, той <i>трябва</i> да е 64-битов“, което също позволява проектът
      да бъде изграждан на машини <i>без</i> етикета <tt>windows</tt>, без
      значение дали имат или не етикета<tt>x64</tt>.
    </dd>

    <dt><tt>a &lt;-> b</tt></dt>
    <dd>
      ЕКВИВАЛЕНТНОСТ — АКО И САМО АКО, същото като <tt>a &amp;&amp; b ||
      !a &amp;&amp; !b</tt><br>
      Напр. <tt>windows &lt;-> dc2</tt> означава: „ако се ползва компютър под
      Windows, той <i>трябва</i> да е в центъра за данни № 2, ако обаче се
      ползва компютър, който не е под Windows, той <i>не трябва</i> да е в
      центъра за данни № 2“.
    </dd>
  </dl>

  <h3>Бележки</h3>
  <ul>
    <li>
      Асоциативността на всички оператори е лява, т. е. <tt>a -> b -> c</tt> 
      означава: <tt>(a -> b) -> c</tt>.
    </li>
    <li>
      Етикетите или имената на компютрите може да са заградени в кавички, ако
      съдържат знаци, които противоречат на синтаксиса на операторите.<br>
      Напр. <tt>"osx (10.11)" || "Windows Server"</tt>.
    </li>
    <li>
      Не е задължително да слагате интервали в изразите, но е добре да го
      правите за четимост. Jenkins прескача празните знаци при изчисляването на
      изразите.
    </li>
    <li>
      Напасване на етикетите или имената на компютрите с шаблони или регулярни
      изрази не се поддържа.
    </li>
    <li>
      Празен израз се изчислява като <i>истина</i> и напасва всички машини.
    </li>
  </ul>

  <h3>Примери</h3>
  <dl>
    <dt><tt>master</tt></dt>
    <dd>Изгражданията на този проект може да са само на основния компютър на
        Jenkins.
    <dd>

    <dt><tt>linux-machine-42</tt></dt>
    <dd>
      Проектът може да бъде изграден само на агент с име
      <tt>linux-machine-42</tt> (или на всяка машина, която има етикет на име
      <tt>linux-machine-42</tt>).
    </dd>

    <dt><tt>windows &amp;&amp; jdk9</tt></dt>
    <dd>
      Изгражданията може да се извършат на всеки подчинен компютър, който е с
      Windows и има версия 9 на комплекта за разработчици на Java (като
      приемаме, че всеки компютър с инсталиран JDK 9 има етикета <tt>jdk9</tt>).
    </dd>

    <dt><tt>postgres &amp;&amp; !vm &amp;&amp; (linux || freebsd)</tt></dt>
    <dd>
      Изгражданията на този проект може да са на всеки агент под Linux или
      FreeBSD, стига да <i>не</i> са във виртуална машина, и да е инсталирана
      базата PostgreSQL (като приемаме, че на всяка машина са поставени 
      съответните етикети, напр. всяка виртуална машина е с етикет <tt>vm</tt>,
      иначе примерът няма да сработи).
    </dd>

  </dl>
</div>
